iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

連續30天 初學者介紹Scala語言系列 第 7

[Day 07]Scala內建結構 Part 2

  • 分享至 

  • xImage
  •  

昨天講了for運算式,今天來補充一個關鍵字yield

昨天的範例都是對遍歷的值進行操作,用完就忘了它們。
如果要記住每次遍歷完的值就可以使用yield
用法:

for clause yield body

舉個例子:

val num = Array(1, 2, 3, 4)
for ( i <- num if i < 4) yield i
num: Array[Int] = Array(1, 2, 3)

try運算式

Scala的例外處理就跟其他語言類似
除了回傳某個值之外,方法(method)可以透過拋出例外來終止程式。

Throwing exceptions

拋出例外的方式跟Java一樣,建立一個物件並以關鍵字throw拋出

throw new IllegalArgumentException

舉例:

val num = 
    if ( b != 0) a/b 
    else 
        throw new ArithmeticException

Catching exceptions

try {
    val f = new FileReader("input.txt")
}
catch {
    case ex: FileNotFoundException => //handling missing file
    case ex: IOException => //handling I/O error
}

首先try內的程式會先執行過,如果拋出例外的話再依序執行catch裡的程式。
在這個例子裡,如果例外的類型是FileNotFoundExceptions,那第一個case會被執行;如果例外的類型是IOExceptions,那第二個case會被執行。

Finally

把那些無論有沒有拋出例外都要執行的code放在Finally裡面

import java.io.FileReader

val file = new FileReader("input.txt")
try {
    //使用file
}
finally {
    file.close //確保有關閉file
}

match運算式

Scala裡的match運算式就相當於Java裡的switch

val i = readInt    //使用者輸入

i match
    case 0 => println("0")
    case 1 => println("1")
    //default match:如果i不是0也不是1就會輸出這行
    case other => println(s"$other")

上面的程式範例讓使用者輸入一個數字,match運算式會檢查這個數是0還是1或者都不是,再接著輸出相對應的輸出選項

如果沒有提供default match的話,有時會造成MatchError

那今天先介紹到這邊 明天繼續!


上一篇
[Day 06]Scala內建結構
下一篇
[Day 08]Scala 類別與物件 Part 1
系列文
連續30天 初學者介紹Scala語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言